Lambda এবং Higher-order Functions
কটলিনে Lambda Expressions এবং Higher-order Functions ফাংশনাল প্রোগ্রামিংয়ের প্রধান উপাদান। এগুলো কোড লেখার কার্যকারিতা বাড়ায় এবং প্রোগ্রামিংকে আরও ডাইনামিক এবং ফ্লেক্সিবল করে তোলে। নিচে Lambda এবং Higher-order Functions নিয়ে বিস্তারিত আলোচনা করা হলো:
১. Lambda Expressions
Lambda Expressions হলো অ্যানোনিমাস (নামহীন) ফাংশন, যা কোড ব্লকের মতো কাজ করে। এটি এক বা একাধিক প্যারামিটার গ্রহণ করতে পারে এবং একটি এক্সপ্রেশন বা স্টেটমেন্ট রিটার্ন করতে পারে।
i) Lambda Expression Syntax
কটলিনে Lambda Expressions সাধারণত {} (ব্রেসেস) এর মধ্যে লেখা হয়।
সাধারণ সিনট্যাক্স:
{ parameter(s) -> body }
ii) উদাহরণ
একটি সাধারণ Lambda Expression:
val sum = { a: Int, b: Int -> a + b }
println(sum(5, 3)) // আউটপুট: 8
ব্যাখ্যা:
- এখানে
sumএকটি Lambda Expression যা দুটিIntপ্যারামিটার গ্রহণ করে এবং তাদের যোগফল রিটার্ন করে।
২. Higher-order Functions
Higher-order Functions হলো এমন ফাংশন, যা একটি ফাংশনকে প্যারামিটার হিসেবে গ্রহণ করতে পারে বা একটি ফাংশনকে রিটার্ন করতে পারে। এটি কোড পুনঃব্যবহারযোগ্যতা এবং ফ্লেক্সিবিলিটি বাড়ায়।
i) Higher-order Function Syntax
সাধারণ সিনট্যাক্স:
fun functionName(parameter: (Type) -> ReturnType): ReturnType {
// function body
}
ii) উদাহরণ
একটি Higher-order Function:
fun operateOnNumbers(a: Int, b: Int, operation: (Int, Int) -> Int): Int {
return operation(a, b)
}
fun main() {
val result = operateOnNumbers(4, 5, { x, y -> x + y })
println(result) // আউটপুট: 9
}
ব্যাখ্যা:
- এখানে
operateOnNumbersফাংশনটি তিনটি প্যারামিটার নেয়: দুইটিIntসংখ্যা এবং একটি Lambda Expression যা দুইটিIntপ্যারামিটার গ্রহণ করে এবং একটিIntরিটার্ন করে। mainফাংশনে Lambda Expression হিসেবে যোগফল নির্ধারণ করা হয়েছে।
৩. Trailing Lambda Syntax
কটলিনে, যদি একটি ফাংশনের শেষ প্যারামিটার একটি Lambda Expression হয়, তবে Lambda Expression কে ফাংশন কলের বাইরে রেখে লেখা যায়।
উদাহরণ:
val result = operateOnNumbers(4, 5) { x, y -> x * y }
println(result) // আউটপুট: 20
ব্যাখ্যা:
- এখানে
operateOnNumbersফাংশন কলের পর Lambda Expression{ x, y -> x * y }একটি Trailing Lambda হিসেবে ব্যবহার করা হয়েছে।
৪. Smart Casts
Lambda Expressions এবং Higher-order Functions এর সাথে Smart Casts কাজ করে, যা একটি টেস্ট করে নিশ্চিত হওয়ার পরে স্বয়ংক্রিয়ভাবে টাইপ কাস্ট করে।
উদাহরণ:
fun printLength(obj: Any) {
if (obj is String) {
println("String length: ${obj.length}") // obj স্বয়ংক্রিয়ভাবে String টাইপে কাস্ট হয়েছে
}
}
ব্যাখ্যা:
- এখানে
obj is Stringচেক করার পর, কটলিনobjকে স্বয়ংক্রিয়ভাবেStringটাইপ হিসেবে চিনতে পারে।
৫. Common Higher-order Functions
কটলিনে Collections-এর সাথে কিছু সাধারণ Higher-order Functions আছে, যেমন:
i) map
map ফাংশন একটি কালেকশনের প্রতিটি আইটেমের উপর একটি অপারেশন প্রয়োগ করে এবং নতুন কালেকশন রিটার্ন করে।
উদাহরণ:
val numbers = listOf(1, 2, 3, 4)
val doubled = numbers.map { it * 2 }
println(doubled) // আউটপুট: [2, 4, 6, 8]
ii) filter
filter ফাংশন একটি শর্ত মেনে চলা আইটেমগুলো সিলেক্ট করে নতুন একটি কালেকশন রিটার্ন করে।
উদাহরণ:
val numbers = listOf(1, 2, 3, 4, 5, 6)
val evenNumbers = numbers.filter { it % 2 == 0 }
println(evenNumbers) // আউটপুট: [2, 4, 6]
iii) forEach
forEach ফাংশন একটি কালেকশনের প্রতিটি আইটেমের উপর একটি অপারেশন এক্সিকিউট করে।
উদাহরণ:
val fruits = listOf("Apple", "Banana", "Cherry")
fruits.forEach { println(it) }
// আউটপুট:
// Apple
// Banana
// Cherry
উপসংহার
কটলিনে Lambda Expressions এবং Higher-order Functions ফাংশনাল প্রোগ্রামিংয়ের জন্য শক্তিশালী টুল। এগুলো কোডের পুনঃব্যবহারযোগ্যতা এবং ফ্লেক্সিবিলিটি বাড়াতে সাহায্য করে। Lambda Expressions দ্বারা অ্যানোনিমাস ফাংশন তৈরি করা যায়, এবং Higher-order Functions ফাংশনগুলোকে প্যারামিটার হিসেবে গ্রহণ করে কোডকে আরও কার্যকরী করে তোলে।
Lambda Expressions কী এবং কিভাবে কাজ করে
Lambda Expressions হলো অ্যানোনিমাস ফাংশন (অর্থাৎ নামহীন ফাংশন) যা কোনো ফাংশনাল প্রোগ্রামিং কনটেক্সটে ব্যবহৃত হয়। কটলিনে lambda expressions কোডকে আরও সংক্ষিপ্ত এবং পাঠযোগ্য করে তোলে এবং ফাংশনাল প্রোগ্রামিং কনসেপ্টগুলোকে সাপোর্ট করে।
Lambda expressions-এর মাধ্যমে আপনি ফাংশনগুলোকে প্যারামিটার হিসেবে পাস করতে পারেন, যা কোডের পুনঃব্যবহারযোগ্যতা এবং ফ্লেক্সিবিলিটি বাড়ায়।
১. Lambda Expressions এর সিনট্যাক্স
কটলিনে lambda expression-এর সাধারণ সিনট্যাক্স হল:
val lambdaName: (ParameterType) -> ReturnType = { parameters -> body }
উদাহরণ:
val sum: (Int, Int) -> Int = { a, b -> a + b }
ব্যাখ্যা:
sumএকটি lambda expression যা দুইটিIntপ্যারামিটার গ্রহণ করে এবং তাদের যোগফল রিটার্ন করে।
২. Lambda Expressions কিভাবে কাজ করে
Lambda expressions-এর মাধ্যমে আপনি একটি ফাংশনকে সহজেই একটি ভ্যারিয়েবলে সংরক্ষণ করতে পারেন এবং তা পরে ফাংশন হিসেবে ব্যবহার করতে পারেন।
উদাহরণ:
fun main() {
val add: (Int, Int) -> Int = { a, b -> a + b }
println(add(5, 3)) // আউটপুট: 8
}
ব্যাখ্যা:
- এখানে
addlambda expression দুইটি সংখ্যা যোগ করার জন্য ব্যবহৃত হচ্ছে।
৩. Lambda Expressions কে একটি ফাংশনের প্যারামিটার হিসেবে ব্যবহার করা
Lambda expressions সাধারণত ফাংশনের প্যারামিটার হিসেবে ব্যবহৃত হয়। নিচের উদাহরণে operation ফাংশনে lambda expression প্যারামিটার হিসেবে ব্যবহার করা হয়েছে:
fun operateOnNumbers(a: Int, b: Int, operation: (Int, Int) -> Int): Int {
return operation(a, b)
}
fun main() {
val result = operateOnNumbers(10, 5) { x, y -> x + y }
println(result) // আউটপুট: 15
}
ব্যাখ্যা:
operateOnNumbersফাংশনটি দুটি সংখ্যা এবং একটি lambda expression গ্রহণ করছে, যা গণনা করার জন্য ব্যবহৃত হচ্ছে।
৪. Single Parameter Lambda Expressions
যদি lambda expression-এ একটি মাত্র প্যারামিটার থাকে, তবে আপনি it কীওয়ার্ড ব্যবহার করতে পারেন।
উদাহরণ:
val square: (Int) -> Int = { it * it }
println(square(4)) // আউটপুট: 16
ব্যাখ্যা:
- এখানে
itস্বয়ংক্রিয়ভাবে একমাত্র প্যারামিটার হিসাবে ব্যবহৃত হচ্ছে।
৫. Returning Multiple Values
Lambda expressions দিয়ে আপনি একটি কলব্যাক ফাংশন লিখতে পারেন যা একাধিক ভ্যালু রিটার্ন করতে পারে।
উদাহরণ:
val multipleValues: (Int) -> Pair<Int, Int> = { it to it * it }
val (num, square) = multipleValues(5)
println("Number: $num, Square: $square") // আউটপুট: Number: 5, Square: 25
ব্যাখ্যা:
- এখানে
multipleValueslambda expression একটিPairরিটার্ন করছে, যা একটি সংখ্যা এবং তার স্কোয়ার ধারণ করছে।
৬. Higher-order Functions
Lambda expressions কটলিনের higher-order functions-এর একটি গুরুত্বপূর্ণ অংশ। Higher-order functions হল এমন ফাংশন যা অন্য ফাংশনকে প্যারামিটার হিসেবে গ্রহণ করে বা একটি ফাংশনকে রিটার্ন করে।
উদাহরণ:
fun filterEvenNumbers(numbers: List<Int>, predicate: (Int) -> Boolean): List<Int> {
return numbers.filter(predicate)
}
fun main() {
val numbers = listOf(1, 2, 3, 4, 5, 6)
val evenNumbers = filterEvenNumbers(numbers) { it % 2 == 0 }
println(evenNumbers) // আউটপুট: [2, 4, 6]
}
ব্যাখ্যা:
- এখানে
filterEvenNumbersফাংশনটি একটি লিস্ট এবং একটি lambda expression গ্রহণ করছে, যা সংখ্যা ফিল্টার করতে ব্যবহৃত হচ্ছে।
উপসংহার
Lambda Expressions কটলিনে একটি শক্তিশালী ফিচার, যা ফাংশনাল প্রোগ্রামিং কনসেপ্টগুলোর বাস্তবায়ন সহজ করে। Lambda expressions আপনাকে কোডকে আরো সংক্ষিপ্ত, পরিষ্কার, এবং পুনঃব্যবহারযোগ্য করে তোলে।
Higher-order Functions এর ভূমিকা
Higher-order Functions হলো এমন ফাংশন যা এক বা একাধিক ফাংশনকে প্যারামিটার হিসেবে গ্রহণ করতে পারে অথবা একটি ফাংশনকে রিটার্ন করতে পারে। কটলিনে এই ফিচারটি প্রোগ্রামিংকে আরও ফ্লেক্সিবল এবং মডুলার করে তোলে। Higher-order Functions-এর মাধ্যমে আপনি কোডের পুনঃব্যবহারযোগ্যতা বাড়াতে এবং কার্যকরী প্রোগ্রামিং প্যাটার্ন অনুসরণ করতে পারেন।
নিচে Higher-order Functions-এর ভূমিকা ও সুবিধাগুলো আলোচনা করা হলো:
১. ফাংশন প্যারামিটার হিসেবে গ্রহণ
Higher-order Functions ব্যবহার করে আপনি ফাংশনগুলোকে প্যারামিটার হিসেবে গ্রহণ করতে পারেন। এটি কোডকে আরও সংক্ষিপ্ত এবং রিডেবল করে তোলে।
উদাহরণ:
fun calculate(a: Int, b: Int, operation: (Int, Int) -> Int): Int {
return operation(a, b)
}
fun main() {
val sum = calculate(5, 10) { x, y -> x + y }
println("Sum: $sum") // আউটপুট: Sum: 15
}
ব্যাখ্যা:
calculateফাংশনটি দুটিIntপ্যারামিটার এবং একটি ফাংশন প্যারামিটার হিসেবে নেয়।- ল্যাম্বডা এক্সপ্রেশন
{ x, y -> x + y }calculateফাংশনে পাস করা হয়েছে।
২. ফাংশন রিটার্ন করা
Higher-order Functions ব্যবহার করে আপনি একটি ফাংশনকে রিটার্নও করতে পারেন। এটি বিশেষভাবে কার্যকর যখন আপনি একটি কাস্টম ফাংশন তৈরি করতে চান।
উদাহরণ:
fun operation(type: String): (Int, Int) -> Int {
return when (type) {
"add" -> { x, y -> x + y }
"subtract" -> { x, y -> x - y }
else -> { x, y -> 0 }
}
}
fun main() {
val add = operation("add")
val result = add(5, 3)
println("Result: $result") // আউটপুট: Result: 8
}
ব্যাখ্যা:
operationফাংশনটি একটিStringপ্যারামিটার নেয় এবং একটি ল্যাম্বডা ফাংশন রিটার্ন করে যা যোগ বা বিয়োগ করার কাজ করে।
৩. ডাটা প্রসেসিং এবং কালেকশন ম্যানিপুলেশন
Higher-order Functions ব্যবহার করে কালেকশনগুলোর উপর বিভিন্ন কার্যকলাপ সহজে করা যায়। কটলিনের অনেক বিল্ট-ইন ফাংশন যেমন map, filter, reduce এগুলোর মাধ্যমে কালেকশনগুলোর উপর অপারেশন করতে সহায়তা করে।
উদাহরণ:
fun main() {
val numbers = listOf(1, 2, 3, 4, 5)
// Using map
val squares = numbers.map { it * it }
println("Squares: $squares") // আউটপুট: Squares: [1, 4, 9, 16, 25]
// Using filter
val evenNumbers = numbers.filter { it % 2 == 0 }
println("Even Numbers: $evenNumbers") // আউটপুট: Even Numbers: [2, 4]
}
ব্যাখ্যা:
- এখানে
mapএবংfilterহলো Higher-order Functions, যা তালিকার উপর প্রয়োগ করা হয়েছে।
৪. কোডের পুনঃব্যবহারযোগ্যতা
Higher-order Functions কোডের পুনঃব্যবহারযোগ্যতা বাড়াতে সাহায্য করে। আপনি একবার একটি ফাংশন তৈরি করলে সেটিকে বিভিন্ন জায়গায় ব্যবহার করতে পারেন।
উদাহরণ:
fun <T> List<T>.customFilter(predicate: (T) -> Boolean): List<T> {
val result = mutableListOf<T>()
for (item in this) {
if (predicate(item)) {
result.add(item)
}
}
return result
}
fun main() {
val numbers = listOf(1, 2, 3, 4, 5)
val filtered = numbers.customFilter { it > 2 }
println(filtered) // আউটপুট: [3, 4, 5]
}
ব্যাখ্যা:
- এখানে
customFilterহলো একটি Higher-order Function যাListক্লাসের এক্সটেনশন ফাংশন হিসেবে কাজ করে এবং একটি ল্যাম্বডা প্যারামিটার গ্রহণ করে।
৫. ফাংশনাল প্রোগ্রামিংয়ের সুবিধা
Higher-order Functions ফাংশনাল প্রোগ্রামিংয়ের একটি গুরুত্বপূর্ণ অংশ। এগুলো কম্পিউটেশনের জন্য ফাংশনকে প্রথম শ্রেণীর নাগরিক হিসেবে গণ্য করে, ফলে কোড লেখার সময় একটি নতুন দৃষ্টিভঙ্গি প্রদান করে।
উপসংহার
Higher-order Functions কটলিনের একটি শক্তিশালী ফিচার যা কোডকে আরও ফ্লেক্সিবল, পুনঃব্যবহারযোগ্য এবং কার্যকর করে তোলে। ফাংশন প্যারামিটার হিসেবে গ্রহণ করে, রিটার্ন করে এবং কালেকশনগুলোর উপর বিভিন্ন কার্যকলাপ করতে সক্ষম হওয়ার মাধ্যমে এটি প্রোগ্রামিংকে আরও সহজ ও সিম্পল করে।
Inline Functions এবং Lambda Optimization
কটলিনে Inline Functions এবং Lambda Optimization এর মাধ্যমে কোডের কার্যকারিতা এবং পারফরম্যান্স উন্নত করা যায়। Inline Functions ফাংশন কলের ওভারহেড কমাতে সহায়তা করে, এবং Lambda Optimization নিশ্চিত করে যে ল্যাম্বডা এক্সপ্রেশনগুলো মেমোরি ব্যবহারের ক্ষেত্রে আরও কার্যকর।
১. Inline Functions
Inline Functions হলো এমন ফাংশন, যা কম্পাইলারকে নির্দেশ দেয় যে যখন এই ফাংশনটি কল করা হয়, তখন ফাংশনের বডি সরাসরি সেই স্থানে সংযোজন করা উচিত, যাতে ফাংশন কলের ওভারহেড কমানো যায়।
i) Inline Functions ডিক্লারেশন
Inline Functions তৈরি করতে inline কীওয়ার্ড ব্যবহার করতে হয়।
উদাহরণ:
inline fun log(message: String) {
println("Log: $message")
}
fun main() {
log("Application started")
}
ব্যাখ্যা:
- এখানে
logফাংশনটি inline হিসাবে ডিফাইন করা হয়েছে। যখন এটি কল করা হবে, তখন ফাংশনের বডি সরাসরি সেই স্থানে যোগ হবে, ফলে ফাংশন কলের ওভারহেড কমবে।
২. Lambda Optimization
কটলিনে ল্যাম্বডা এক্সপ্রেশন ব্যবহার করার সময়, যদি আপনি কোনো ল্যাম্বডা ফাংশনকে inline ফাংশনে পাস করেন, তাহলে এটি সাধারণত আরও কার্যকরী হয়। কারণ inline ফাংশনের মাধ্যমে ল্যাম্বডা এক্সপ্রেশনগুলো ক্লোজার তৈরি না করেই এক্সিকিউট হয়।
i) Inline Function with Lambda
উদাহরণ:
inline fun measureTime(block: () -> Unit) {
val start = System.currentTimeMillis()
block() // ল্যাম্বডা এক্সপ্রেশন কল করা হচ্ছে
val end = System.currentTimeMillis()
println("Time taken: ${end - start} ms")
}
fun main() {
measureTime {
for (i in 1..1000000) {
// কিছু কাজ
}
}
}
ব্যাখ্যা:
- এখানে
measureTimeফাংশনটি inline, এবং এটি একটি ল্যাম্বডা এক্সপ্রেশন প্যারামিটার হিসেবে গ্রহণ করছে। এটি যখন কল হয়, তখন ল্যাম্বডা এক্সপ্রেশনটি inline হয়ে যাবে, ফলে রানটাইমে ক্লোজার তৈরি করার প্রয়োজন হবে না।
৩. Advantages of Inline Functions
- Performance Improvement: Inline Functions ফাংশন কলের ওভারহেড কমায়, বিশেষ করে যখন ছোট ফাংশনগুলি একাধিক স্থানে ব্যবহৃত হয়।
- Code Readability: Inline Functions ব্যবহারে কোড আরও পরিষ্কার এবং রিডেবল হয়।
- No Closure Overhead: Lambda Expressions inline হলে ক্লোজার তৈরি না করায় মেমোরি ব্যবহারে অপ্টিমাইজেশন হয়।
৪. Limitations of Inline Functions
- Code Size: বড় inline ফাংশনগুলো ব্যবহার করলে কোড সাইজ বেড়ে যেতে পারে, যা ইনস্ট্রাকশন ক্যাশে সমস্যা তৈরি করতে পারে।
- Recursion: Inline Functions রিক্রসিভ হওয়া যাবে না, কারণ এটি অনন্ত লুপের সমস্যা তৈরি করতে পারে।
৫. Example of Inline Function with Lambda Optimization
inline fun runMultipleTimes(times: Int, block: () -> Unit) {
repeat(times) {
block()
}
}
fun main() {
runMultipleTimes(3) {
println("Hello, Kotlin!")
}
}
ব্যাখ্যা:
- এখানে
runMultipleTimesএকটি inline ফাংশন যা নির্দিষ্ট সংখ্যক বার একটি ল্যাম্বডা এক্সপ্রেশন কল করে। এটি ল্যাম্বডা এক্সপ্রেশনটিকে একটি ক্লোজারে রূপান্তর না করে কার্যকরীভাবে এক্সিকিউট করে।
উপসংহার
কটলিনে Inline Functions এবং Lambda Optimization কোডের কার্যকারিতা এবং পারফরম্যান্স উন্নত করতে সাহায্য করে। Inline Functions ফাংশন কলের ওভারহেড কমায় এবং Lambda Expressions এর ক্লোজার তৈরির প্রয়োজনীয়তা কমায়, ফলে মেমোরি ব্যবহারের ক্ষেত্রে অপ্টিমাইজেশন ঘটে।
Function Types এবং Anonymous Functions
কটলিনে Function Types এবং Anonymous Functions ফাংশনাল প্রোগ্রামিংয়ের গুরুত্বপূর্ণ কনসেপ্ট। এগুলো কোডের পুনঃব্যবহারযোগ্যতা এবং ফ্লেক্সিবিলিটি বাড়ায়। নিচে এই দুইটি বিষয়ে বিস্তারিত আলোচনা করা হলো।
১. Function Types
Function Types কটলিনে একটি ফাংশনের সিগনেচারকে বোঝায়, যেখানে ফাংশনের ইনপুট প্যারামিটার এবং আউটপুট টাইপ উল্লেখ করা হয়। কটলিনে একটি ফাংশনের টাইপ উল্লেখ করতে, আপনি প্যারামিটারগুলোর টাইপ এবং রিটার্ন টাইপের মধ্যে -> ব্যবহার করেন।
উদাহরণ:
kotlin
Copy code
val sum: (Int, Int) -> Int = { a, b -> a + b }
ব্যাখ্যা:
- এখানে
sumএকটি function type, যা দুটিIntপ্যারামিটার নেয় এবং একটিIntরিটার্ন করে।
Function Types এর Syntax
val functionName: (ParameterType1, ParameterType2, ...) -> ReturnType
২. Function Types এর ব্যবহার
Function types সাধারণত higher-order functions এ ব্যবহৃত হয়, যেখানে একটি ফাংশন অন্য ফাংশনকে প্যারামিটার হিসেবে গ্রহণ করে বা একটি ফাংশনকে রিটার্ন করে।
উদাহরণ:
fun calculate(a: Int, b: Int, operation: (Int, Int) -> Int): Int {
return operation(a, b)
}
fun main() {
val result = calculate(5, 3) { x, y -> x * y }
println(result) // আউটপুট: 15
}
ব্যাখ্যা:
- এখানে
calculateএকটি higher-order function, যা দুটি সংখ্যা এবং একটি ফাংশন প্যারামিটার হিসেবে গ্রহণ করছে।operationফাংশনটি ইনপুট সংখ্যা দুটির উপর কার্যকর হবে।
৩. Anonymous Functions
Anonymous Functions হলো এমন ফাংশন যেগুলোর কোন নাম নেই এবং এগুলো সাধারণত lambda expressions-এর চেয়ে বেশি কার্যকরী। আপনি যখন একটি নতুন ফাংশন তৈরি করতে চান কিন্তু তা একটি ভ্যারিয়েবলে সংরক্ষণ করতে চান না, তখন anonymous functions ব্যবহার করা হয়।
Syntax:
val functionName: (ParameterType1, ParameterType2, ...) -> ReturnType = fun(parameter1: ParameterType1, parameter2: ParameterType2, ...) {
// Function body
}
উদাহরণ:
val multiply: (Int, Int) -> Int = fun(a: Int, b: Int): Int {
return a * b
}
fun main() {
println(multiply(3, 4)) // আউটপুট: 12
}
ব্যাখ্যা:
- এখানে
multiplyএকটি anonymous function যা দুটিIntসংখ্যা গ্রহণ করে এবং তাদের গুণফল রিটার্ন করে।
৪. Anonymous Functions with Return Types
Anonymous functions-এ আপনি রিটার্ন টাইপ নির্দিষ্ট করতে পারেন।
উদাহরণ:
val add: (Int, Int) -> Int = fun(x: Int, y: Int): Int {
return x + y
}
fun main() {
println(add(2, 3)) // আউটপুট: 5
}
ব্যাখ্যা:
- এখানে
addএকটি anonymous function যা দুটি সংখ্যা যোগ করে এবং রিটার্ন করে।
৫. Differences between Lambda Expressions and Anonymous Functions
| বৈশিষ্ট্য | Lambda Expressions | Anonymous Functions |
|---|---|---|
| নাম | নামহীন | নামহীন |
| Syntax | { parameters -> body } | fun(parameters): ReturnType { body } |
| Return Type | Return type স্বয়ংক্রিয়ভাবে নির্ধারণ হয় | Return type নির্দিষ্ট করতে হয় |
| Functional Type | সর্বদা Function Types | Function Types হতে পারে |
return Keyword | return ব্যবহার করলে বাইরের ফাংশনে যায় | return ব্যবহার করলে শুধুমাত্র নিজস্ব ফাংশনে যায় |
উপসংহার
কটলিনে Function Types এবং Anonymous Functions শক্তিশালী কনসেপ্ট, যা কোডের পুনঃব্যবহারযোগ্যতা এবং ফ্লেক্সিবিলিটি বাড়ায়। Function types কেবল ফাংশনের সিগনেচারকে বোঝায়, যেখানে anonymous functions নামহীন ফাংশন তৈরির একটি উপায়। এই ফিচারগুলো ফাংশনাল প্রোগ্রামিংয়ের সুবিধা গ্রহণ করতে সহায়ক।
Read more